package PruebasUnitarias;

import junit.framework.TestCase;
import Modelo.*;

public class TaladroTest extends TestCase {
	private Bloque[][] bloques;
	private Mapa mapa;
	
	
	protected void setUp() throws Exception {
		super.setUp();
		mapa= new Mapa(); 
		bloques= new Bloque[5][3];
		
		for(int i=0;i<5;i++)
			for(int j=0;j<3;j++)
				if(j==1&&(i<3&&i>0))
					bloques[i][j]= new Vacio(mapa);
				else
					bloques[i][j]= new Tierra(mapa);
		bloques[0][0]= new NaveEspacial(mapa);
		bloques[0][2]= new NaveEspacialLlegada(mapa);
		mapa.inicializarMapa(bloques);
	}

	public void testEsEjecutableSobre(){
		PoseedorDeHabilidad pooglin= new Pooglin(mapa);
		bloques[1][1].alojar(pooglin);
		Habilidad taladro= new Taladro();
		pooglin.asignarHabilidad(taladro);
		assertFalse(taladro.esEjecutableSobre(pooglin));
		bloques[1][1].desalojar(pooglin);
		bloques[2][1].alojar(pooglin);		
		assertTrue(taladro.esEjecutableSobre(pooglin));	
	}
	
	public void testEjecutarSobre(){
		PoseedorDeHabilidad pooglin= new Pooglin(mapa);
		Habilidad taladro= new Taladro();
		pooglin.asignarHabilidad(taladro);
		bloques[2][1].alojar(pooglin);
		for(int i=0;i<4;i++){
			assertTrue(bloques[3][1] instanceof Tierra);
			taladro.ejecutarSobre(pooglin);
		}
		assertTrue(bloques[3][1] instanceof Vacio);
		
		// la roca es inmune al taladro 
		mapa.ModificarBloquePor(bloques[3][1], new Roca(mapa));
		for(int i=0;i<4;i++){
			assertTrue(bloques[3][1] instanceof Roca);
			taladro.ejecutarSobre(pooglin);
		}
		assertFalse(bloques[3][1] instanceof Vacio);
		assertTrue(bloques[3][1] instanceof Roca);
	}	
}
